using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._SpatialAnalystTools._Distance._Legacy
{
    /// <summary>
    /// <para>Path Distance Allocation</para>
    /// <para>Calculates the least-cost source for each cell based on the least accumulative cost over a cost surface, while accounting for surface distance along with horizontal and vertical cost factors.</para>
    /// <para>根据成本表面上的最小累积成本计算每个像元的最低成本源，同时考虑表面距离以及水平和垂直成本系数。</para>
    /// </summary>    
    [DisplayName("Path Distance Allocation")]
    public class PathAllocation : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public PathAllocation()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_source_data">
        /// <para>Input raster or feature source data</para>
        /// <para><xdoc>
        ///   <para>The input source locations.</para>
        ///   <para>This is a raster or feature dataset that identifies the cells or locations from or to which the least accumulated cost distance for every output cell location is calculated.</para>
        ///   <para>For rasters, the input type can be integer or floating point.</para>
        ///   <para>If the input source raster is floating point, the Input value raster parameter must be set, and it must be integer. The value raster will take precedence over the Source field parameter setting.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入源位置。</para>
        ///   <para>这是一个栅格或要素数据集，用于识别计算每个输出像元位置的最小累积成本距离的像元或位置。</para>
        ///   <para>对于栅格，输入类型可以是整数或浮点。</para>
        ///   <para>如果输入源栅格为浮点型，则必须设置输入值栅格参数，并且该参数必须为整数。值栅格将优先于源字段参数设置。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_out_allocation_raster">
        /// <para>Output allocation raster</para>
        /// <para><xdoc>
        ///   <para>The output path distance allocation raster.</para>
        ///   <para>This raster identifies the zone of each source location (cell or feature) that could be reached with the least accumulative cost, while accounting for surface distance and horizontal and vertical cost factors.</para>
        ///   <para>The output raster is of integer type.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出路径距离分配栅格。</para>
        ///   <para>此栅格可识别每个源位置（像元或要素）的区域，这些区域可以以最小的累积成本到达，同时考虑表面距离以及水平和垂直成本因素。</para>
        ///   <para>输出栅格为整数类型。</para>
        /// </xdoc></para>
        /// </param>
        public PathAllocation(object _in_source_data, object _out_allocation_raster)
        {
            this._in_source_data = _in_source_data;
            this._out_allocation_raster = _out_allocation_raster;
        }
        public override string ToolboxName => "Spatial Analyst Tools";

        public override string ToolName => "Path Distance Allocation";

        public override string CallName => "sa.PathAllocation";

        public override List<string> AcceptEnvironments => ["autoCommit", "cellSize", "cellSizeProjectionMethod", "compression", "configKeyword", "extent", "geographicTransformations", "mask", "outputCoordinateSystem", "parallelProcessingFactor", "scratchWorkspace", "snapRaster", "tileSize", "workspace"];

        public override object[] ParameterInfo => [_in_source_data, _out_allocation_raster, _in_cost_raster, _in_surface_raster, _in_horizontal_raster, _horizontal_factor, _in_vertical_raster, _vertical_factor, _maximum_distance, _in_value_raster, _source_field, _out_distance_raster, _out_backlink_raster, _source_cost_multiplier, _source_start_cost, _source_resistance_rate, _source_capacity, _source_direction];

        /// <summary>
        /// <para>Input raster or feature source data</para>
        /// <para><xdoc>
        ///   <para>The input source locations.</para>
        ///   <para>This is a raster or feature dataset that identifies the cells or locations from or to which the least accumulated cost distance for every output cell location is calculated.</para>
        ///   <para>For rasters, the input type can be integer or floating point.</para>
        ///   <para>If the input source raster is floating point, the Input value raster parameter must be set, and it must be integer. The value raster will take precedence over the Source field parameter setting.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入源位置。</para>
        ///   <para>这是一个栅格或要素数据集，用于识别计算每个输出像元位置的最小累积成本距离的像元或位置。</para>
        ///   <para>对于栅格，输入类型可以是整数或浮点。</para>
        ///   <para>如果输入源栅格为浮点型，则必须设置输入值栅格参数，并且该参数必须为整数。值栅格将优先于源字段参数设置。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input raster or feature source data")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_source_data { get; set; }


        /// <summary>
        /// <para>Output allocation raster</para>
        /// <para><xdoc>
        ///   <para>The output path distance allocation raster.</para>
        ///   <para>This raster identifies the zone of each source location (cell or feature) that could be reached with the least accumulative cost, while accounting for surface distance and horizontal and vertical cost factors.</para>
        ///   <para>The output raster is of integer type.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出路径距离分配栅格。</para>
        ///   <para>此栅格可识别每个源位置（像元或要素）的区域，这些区域可以以最小的累积成本到达，同时考虑表面距离以及水平和垂直成本因素。</para>
        ///   <para>输出栅格为整数类型。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output allocation raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_allocation_raster { get; set; }


        /// <summary>
        /// <para>Input cost raster</para>
        /// <para><xdoc>
        ///   <para>A raster defining the impedance or cost to move planimetrically through each cell.</para>
        ///   <para>The value at each cell location represents the cost-per-unit distance for moving through the cell. Each cell location value is multiplied by the cell resolution while also compensating for diagonal movement to obtain the total cost of passing through the cell.</para>
        ///   <para>The values of the cost raster can be integer or floating point, but they cannot be negative or zero (you cannot have a negative or zero cost).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>定义在每个像元中平面移动的阻抗或成本的栅格。</para>
        ///   <para>每个像元位置的值表示在像元中移动的单位距离成本。每个像元位置值乘以像元分辨率，同时还补偿对角线移动，以获得通过像元的总成本。</para>
        ///   <para>成本栅格的值可以是整数或浮点，但不能为负数或零（不能为负数或零成本）。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input cost raster")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _in_cost_raster { get; set; } = null;


        /// <summary>
        /// <para>Input surface raster</para>
        /// <para><xdoc>
        ///   <para>A raster defining the elevation values at each cell location.</para>
        ///   <para>The values are used to calculate the actual surface distance covered when passing between cells.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>定义每个像元位置的高程值的栅格。</para>
        ///   <para>这些值用于计算在单元之间通过时覆盖的实际表面距离。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input surface raster")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _in_surface_raster { get; set; } = null;


        /// <summary>
        /// <para>Input horizontal raster</para>
        /// <para><xdoc>
        ///   <para>A raster defining the horizontal direction at each cell.</para>
        ///   <para>The values on the raster must be integers ranging from 0 to 360, with 0 degrees being north, or toward the top of the screen, and increasing clockwise. Flat areas should be given a value of -1. The values at each location will be used in conjunction with the Horizontal factor to determine the horizontal cost incurred when moving from a cell to its neighbors.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>定义每个像元的水平方向的栅格。</para>
        ///   <para>栅格上的值必须是介于 0 到 360 之间的整数，其中 0 度表示北或朝向屏幕顶部，并顺时针递增。平坦区域的值应为 -1。每个位置的值将与水平因子结合使用，以确定从像元移动到其相邻单元时产生的水平成本。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input horizontal raster")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _in_horizontal_raster { get; set; } = null;


        /// <summary>
        /// <para>Horizontal factor</para>
        /// <para><xdoc>
        ///   <para>Specifies the relationship between the horizontal cost factor and the horizontal relative moving angle (HRMA).</para>
        ///   <para>There are several factors with modifiers from which to select that identify a defined horizontal factor graph. Additionally, a table can be used to create a custom graph. The graphs are used to identify the horizontal factor used in calculating the total cost for moving into a neighboring cell.</para>
        ///   <para>In the descriptions below, two acronyms are used: HF stands for horizontal factor, which defines the horizontal difficulty encountered when moving from one cell to the next; and HRMA stands for horizontal relative moving angle, which identifies the angle between the horizontal direction from a cell and the moving direction.</para>
        ///   <para>The Horizontal factor options are as follows:</para>
        ///   <bulletList>
        ///     <bullet_item>Binary—If the HRMA is less than the cut angle, the HF is set to the value associated with the zero factor; otherwise, it is infinity.</bullet_item><para/>
        ///     <bullet_item>Forward—Only forward movement is allowed. The HRMA must be greater than or equal to 0 and less than 90 degrees (0 <= HRMA < 90). If the HRMA is greater than 0 and less than 45 degrees, the HF for the cell is set to the value associated with the zero factor. If the HRMA is greater than or equal to 45 degrees, the side value modifier value is used. The HF for any HRMA equal to or greater than 90 degrees is set to infinity.</bullet_item><para/>
        ///     <bullet_item>Linear—The HF is a linear function of the HRMA.</bullet_item><para/>
        ///     <bullet_item>Inverse Linear—The HF is an inverse linear function of the HRMA.</bullet_item><para/>
        ///     <bullet_item>Table—A table file will be used to define the horizontal factor graph used to determine the HFs.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>Modifiers to the horizontal factors are the following:</para>
        ///   <bulletList>
        ///     <bullet_item>Zero factor—The horizontal factor to be used when the HRMA is zero. This factor positions the y-intercept for any of the horizontal factor functions.</bullet_item><para/>
        ///     <bullet_item>Cut angle—The HRMA angle beyond which the HF will be set to infinity.</bullet_item><para/>
        ///     <bullet_item>Slope—The slope of the straight line used with the Linear and Inverse Linear horizontal factor keywords. The slope is specified as a fraction of rise over run (for example, 45 percent slope is 1/45, which is input as 0.02222).</bullet_item><para/>
        ///     <bullet_item>Side value—The HF when the HRMA is greater than or equal to 45 degrees and less than 90 degrees when the Forward horizontal factor keyword is specified.</bullet_item><para/>
        ///     <bullet_item>Table name—The name of the table defining the HF.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定水平成本系数与水平相对移动角 （HRMA） 之间的关系。</para>
        ///   <para>有几个带有修饰符的因子可供选择，用于标识定义的水平因子图。此外，表可用于创建自定义图形。这些图表用于识别用于计算移动到相邻单元格的总成本的水平因子。</para>
        ///   <para>在下面的描述中，使用了两个首字母缩略词：HF 代表水平因子，它定义了从一个单元格移动到下一个单元格时遇到的水平困难;HRMA代表水平相对移动角，用于识别来自单元格的水平方向与移动方向之间的角度。</para>
        ///   <para>水平因子选项如下：</para>
        ///   <bulletList>
        ///     <bullet_item>二进制 - 如果 HRMA 小于切割角，则 HF 设置为与零因子关联的值;否则，它是无穷大的。</bullet_item><para/>
        /// <bullet_item>向前 - 仅允许向前移动。HRMA 必须大于或等于 0 且小于 90 度 （0 <= HRMA < 90）。如果 HRMA 大于 0 且小于 45 度，则像元的 HF 设置为与零因子关联的值。如果 HRMA 大于或等于 45 度，则使用边值修饰符值。任何等于或大于 90 度的 HRMA 的 HF 设置为无穷大。</bullet_item><para/>
        ///     <bullet_item>线性—HF 是 HRMA 的线性函数。</bullet_item><para/>
        ///     <bullet_item>反线性—HF 是 HRMA 的反线性函数。</bullet_item><para/>
        ///     <bullet_item>表 - 表文件将用于定义用于确定 HF 的水平因子图。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>水平因子的修饰符如下：</para>
        ///   <bulletList>
        ///     <bullet_item>零因子 - HRMA 为零时要使用的水平因子。该因子定位任何水平因子函数的 y 截距。</bullet_item><para/>
        ///     <bullet_item>切割角度 - HRMA 角度，超过该角度，HF 将设置为无穷大。</bullet_item><para/>
        ///     <bullet_item>坡度 - 用于线性和反线性水平因子关键字的直线坡度。斜率指定为运行上升的分数（例如，45% 的斜率为 1/45，输入为 0.02222）。</bullet_item><para/>
        ///     <bullet_item>边值 - 当 HRMA 大于或等于 45 度时的 HF，以及指定前向水平因子关键字时小于 90 度时的 HF。</bullet_item><para/>
        ///     <bullet_item>表名 - 定义 HF 的表的名称。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Horizontal factor")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _horizontal_factor { get; set; } = null;


        /// <summary>
        /// <para>Input vertical raster</para>
        /// <para><xdoc>
        ///   <para>A raster defining the z-values for each cell location.</para>
        ///   <para>The values are used for calculating the slope used to identify the vertical factor incurred when moving from one cell to another.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>定义每个像元位置的 z 值的栅格。</para>
        ///   <para>这些值用于计算斜率，用于识别从一个像元移动到另一个像元时产生的垂直系数。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input vertical raster")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _in_vertical_raster { get; set; } = null;


        /// <summary>
        /// <para>Vertical factor</para>
        /// <para><xdoc>
        ///   <para>Specifies the relationship between the vertical cost factor and the vertical relative moving angle (VRMA).</para>
        ///   <para>There are several factors with modifiers from which to select that identify a defined vertical factor graph. Additionally, a table can be used to create a custom graph. The graphs are used to identify the vertical factor used in calculating the total cost for moving into a neighboring cell.</para>
        ///   <para>In the descriptions below, two acronyms are used: VF stands for vertical factor, which defines the vertical difficulty encountered in moving from one cell to the next; and VRMA stands for vertical relative moving angle, which identifies the slope angle between the FROM or processing cell and the TO cell.</para>
        ///   <para>The Vertical factor options are as follows:</para>
        ///   <bulletList>
        ///     <bullet_item>Binary—If the VRMA is greater than the low-cut angle and less than the high-cut angle, the VF is set to the value associated with the zero factor; otherwise, it is infinity.</bullet_item><para/>
        ///     <bullet_item>Linear—The VF is a linear function of the VRMA.</bullet_item><para/>
        ///     <bullet_item>Symmetric Linear—The VF is a linear function of the VRMA in either the negative or positive side of the VRMA, respectively, and the two linear functions are symmetrical with respect to the VF (y) axis.</bullet_item><para/>
        ///     <bullet_item>Inverse Linear—The VF is an inverse linear function of the VRMA.</bullet_item><para/>
        ///     <bullet_item>Symmetric Inverse Linear—The VF is an inverse linear function of the VRMA in either the negative or positive side of the VRMA, respectively, and the two linear functions are symmetrical with respect to the VF (y) axis.</bullet_item><para/>
        ///     <bullet_item>Cos—The VF is the cosine-based function of the VRMA.</bullet_item><para/>
        ///     <bullet_item>Sec—The VF is the secant-based function of the VRMA.</bullet_item><para/>
        ///     <bullet_item>Cos-Sec—The VF is the cosine-based function of the VRMA when the VRMA is negative and is the secant-based function of the VRMA when the VRMA is nonnegative.</bullet_item><para/>
        ///     <bullet_item>Sec-Cos—The VF is the secant-based function of the VRMA when the VRMA is negative and is the cosine-based function of the VRMA when the VRMA is nonnegative.</bullet_item><para/>
        ///     <bullet_item>Table—A table file will be used to define the vertical-factor graph used to determine the VFs.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>Modifiers to the vertical keywords are the following:</para>
        ///   <bulletList>
        ///     <bullet_item>Zero factor—The vertical factor used when the VRMA is zero. This factor positions the y-intercept of the specified function. By definition, the zero factor is not applicable to any of the trigonometric vertical functions (COS, SEC, COS-SEC, or SEC-COS). The y-intercept is defined by these functions.</bullet_item><para/>
        ///     <bullet_item>Low Cut angle—The VRMA angle below which the VF will be set to infinity.</bullet_item><para/>
        ///     <bullet_item>High Cut angle—The VRMA angle above which the VF will be set to infinity.</bullet_item><para/>
        ///     <bullet_item>Slope—The slope of the straight line used with the Linear and Inverse Linear vertical-factor keywords. The slope is specified as a fraction of rise over run (for example, 45 percent slope is 1/45, which is input as 0.02222).</bullet_item><para/>
        ///     <bullet_item>Table name—The name of the table defining the VF.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定垂直成本系数与垂直相对移动角 （VRMA） 之间的关系。</para>
        ///   <para>有几个带有修饰符的因子可供选择，用于标识定义的垂直因子图。此外，表可用于创建自定义图形。这些图表用于识别用于计算移动到相邻单元格的总成本的垂直因子。</para>
        ///   <para>在下面的描述中，使用了两个首字母缩略词：VF 代表垂直因子，它定义了从一个单元格移动到下一个单元格时遇到的垂直困难;VRMA代表垂直相对移动角，用于识别FROM或处理单元与TO单元之间的斜角。</para>
        ///   <para>垂直系数选项如下：</para>
        ///   <bulletList>
        ///     <bullet_item>二进制 - 如果 VRMA 大于低切角且小于高切角，则 VF 设置为与零因子关联的值;否则，它是无穷大的。</bullet_item><para/>
        ///     <bullet_item>线性—VF 是 VRMA 的线性函数。</bullet_item><para/>
        ///     <bullet_item>对称线性—VF 分别是 VRMA 在 VRMA 的负侧或正侧的线性函数，并且两个线性函数相对于 VF （y） 轴是对称的。</bullet_item><para/>
        ///     <bullet_item>反线性—VF 是 VRMA 的反线性函数。</bullet_item><para/>
        ///     <bullet_item>对称反线性—VF 分别是 VRMA 在 VRMA 的负侧或正侧的反线性函数，并且两个线性函数相对于 VF （y） 轴是对称的。</bullet_item><para/>
        ///     <bullet_item>Cos—VF 是 VRMA 的基于余弦的函数。</bullet_item><para/>
        ///     <bullet_item>秒 — VF 是 VRMA 的基于割线的函数。</bullet_item><para/>
        ///     <bullet_item>余秒—当 VRMA 为负时，VF 是 VRMA 的基于余弦的函数，当 VRMA 为非负时，VF 是 VRMA 的基于正割的函数。</bullet_item><para/>
        ///     <bullet_item>Sec-Cos — 当 VRMA 为负时，VF 是 VRMA 的基于割线的函数，当 VRMA 为非负时，VF 是 VRMA 的基于余弦的函数。</bullet_item><para/>
        ///     <bullet_item>表 - 表文件将用于定义用于确定 VF 的垂直因子图。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>垂直关键字的修饰符如下：</para>
        ///   <bulletList>
        ///     <bullet_item>零因子 - VRMA 为零时使用的垂直因子。此因子定位指定函数的 y 截距。根据定义，零因子不适用于任何三角垂直函数（COS、SEC、COS-SEC 或 SEC-COS）。y 截距由这些函数定义。</bullet_item><para/>
        ///     <bullet_item>低切角 （Low Cut angle） - VF 将设置为无穷大的 VRMA 角度。</bullet_item><para/>
        ///     <bullet_item>高切割角度 （High Cut angle） - VF 将设置为无穷大的 VRMA 角度。</bullet_item><para/>
        ///     <bullet_item>坡度 - 用于线性和反线性垂直因子关键字的直线斜率。斜率指定为运行上升的分数（例如，45% 的斜率为 1/45，输入为 0.02222）。</bullet_item><para/>
        ///     <bullet_item>表名 - 定义 VF 的表的名称。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Vertical factor")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _vertical_factor { get; set; } = null;


        /// <summary>
        /// <para>Maximum distance</para>
        /// <para><xdoc>
        ///   <para>The threshold that the accumulative cost values cannot exceed.</para>
        ///   <para>If an accumulative cost distance value exceeds this value, the output value for the cell location will be NoData. The maximum distance is the extent for which the accumulative cost distances are calculated.</para>
        ///   <para>The default distance is to the edge of the output raster.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>累计成本值不能超过的阈值。</para>
        ///   <para>如果累计成本距离值超过此值，则像元位置的输出值将为 NoData。最大距离是计算累计成本距离的范围。</para>
        ///   <para>默认距离为到输出栅格的边缘。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum distance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _maximum_distance { get; set; } = null;


        /// <summary>
        /// <para>Input value raster</para>
        /// <para><xdoc>
        ///   <para>The input integer raster that identifies the zone values that will be used for each input source location.</para>
        ///   <para>For each source location (cell or feature), the Input value raster value will be assigned to all cells allocated to the source location for the computation. The value raster will take precedence over the Source field parameter setting.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入整数栅格，用于标识将用于每个输入源位置的区域值。</para>
        ///   <para>对于每个源位置（像元或要素），输入值栅格值将分配给分配给源位置进行计算的所有像元。值栅格将优先于源字段参数设置。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input value raster")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _in_value_raster { get; set; } = null;


        /// <summary>
        /// <para>Source field</para>
        /// <para><xdoc>
        ///   <para>The field used to assign values to the source locations. It must be of integer type.</para>
        ///   <para>If the Input value raster parameter has been set, the values in that input will have precedence over the Source field parameter setting.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于为源位置分配值的字段。它必须是整数类型。</para>
        ///   <para>如果已设置输入值栅格参数，则该输入中的值将优先于源字段参数设置。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Source field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _source_field { get; set; } = null;


        /// <summary>
        /// <para>Output distance raster</para>
        /// <para><xdoc>
        ///   <para>The output path distance raster.</para>
        ///   <para>The output path distance raster identifies, for each cell, the least accumulative cost distance, over a cost surface to the identified source locations, while accounting for surface distance as well as horizontal and vertical surface factors.</para>
        ///   <para>A source can be a cell, a set of cells, or one or more feature locations.</para>
        ///   <para>The output raster is of floating-point type.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出路径距离栅格。</para>
        ///   <para>输出路径距离栅格可识别每个像元的最小累积成本距离，该距离在成本表面上到已识别的源位置，同时考虑表面距离以及水平和垂直表面因素。</para>
        ///   <para>源可以是一个像元、一组像元或一个或多个要素位置。</para>
        ///   <para>输出栅格为浮点类型。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output distance raster")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_distance_raster { get; set; } = null;


        /// <summary>
        /// <para>Output backlink raster</para>
        /// <para><xdoc>
        ///   <para>The output cost backlink raster.</para>
        ///   <para>The backlink raster contains values 0 through 8, which define the direction or identify the next neighboring cell (the succeeding cell) along the least accumulative cost path from a cell to reach its least-cost source, while accounting for surface distance as well as horizontal and vertical surface factors.</para>
        ///   <para>If the path is to pass into the right neighbor, the cell will be assigned the value 1, 2 for the lower right diagonal cell, and continue clockwise. The value 0 is reserved for source cells.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出成本反向链接栅格。</para>
        ///   <para>反向链路栅格包含值 0 到 8，这些值定义方向或标识下一个相邻像元（下一个像元）沿累积成本最低的路径从像元到达其成本最低的源，同时考虑表面距离以及水平和垂直表面因素。</para>
        ///   <para>如果路径要传递到右邻，则将为右下角对角线单元格分配值 1、2，并继续顺时针方向。值 0 保留给源单元格。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output backlink raster")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_backlink_raster { get; set; } = null;


        /// <summary>
        /// <para>Multiplier to apply to costs</para>
        /// <para><xdoc>
        ///   <para>The multiplier to apply to the cost values.</para>
        ///   <para>This allows for control of the mode of travel or the magnitude at a source. The greater the multiplier, the greater the cost to move through each cell.</para>
        ///   <para>The values must be greater than zero. The default is 1.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>应用于成本值的乘数。</para>
        ///   <para>这允许控制行进方式或源的大小。乘数越大，通过每个单元格移动的成本就越大。</para>
        ///   <para>这些值必须大于零。默认值为 1。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Multiplier to apply to costs")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _source_cost_multiplier { get; set; } = null;


        /// <summary>
        /// <para>Start cost</para>
        /// <para><xdoc>
        ///   <para>The starting cost from which to begin the cost calculations.</para>
        ///   <para>Allows for the specification of the fixed cost associated with a source. Instead of starting at a cost of zero, the cost algorithm will begin with the value set by Start cost.</para>
        ///   <para>The values must be zero or greater. The default is 0.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>开始成本计算的起始成本。</para>
        ///   <para>允许指定与源关联的固定成本。成本算法不是从零开始，而是从开始成本设置的值开始。</para>
        ///   <para>这些值必须为零或更大。默认值为 0。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Start cost")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _source_start_cost { get; set; } = null;


        /// <summary>
        /// <para>Accumulative cost resistance rate</para>
        /// <para><xdoc>
        ///   <para>This parameter simulates the increase in the effort to overcome costs as the accumulative cost increases. It is used to model fatigue of the traveler. The growing accumulative cost to reach a cell is multiplied by the resistance rate and added to the cost to move into the subsequent cell.</para>
        ///   <para>It is a modified version of a compound interest rate formula that is used to calculate the apparent cost of moving through a cell. As the value of the resistance rate increases, it increases the cost of the cells that are visited later. The greater the resistance rate, the more additional cost is added to reach the next cell, which is compounded for each subsequent movement. Since the resistance rate is similar to a compound rate and generally the accumulative cost values are very large, small resistance rates are suggested, such as 0.02, 0.005, or even smaller, depending on the accumulative cost values.</para>
        ///   <para>The values must be zero or greater. The default is 0.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>此参数模拟随着累积成本的增加而增加克服成本的努力。它用于模拟旅行者的疲劳。到达一个电池的累积成本不断增长，乘以电阻率，并添加到进入后续电池的成本中。</para>
        ///   <para>它是复利利率公式的修改版本，用于计算通过单元格的表观成本。随着电阻率值的增加，它增加了以后访问的电池的成本。阻力率越大，到达下一个单元的额外成本就越多，每次后续运动都会增加成本。由于电阻率与复合率相似，并且通常累积成本值非常大，因此建议根据累积成本值使用较小的电阻率，例如0.02、0.005甚至更小。</para>
        ///   <para>这些值必须为零或更大。默认值为 0。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Accumulative cost resistance rate")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _source_resistance_rate { get; set; } = null;


        /// <summary>
        /// <para>Capacity</para>
        /// <para><xdoc>
        ///   <para>The cost capacity for the traveler for a source.</para>
        ///   <para>The cost calculations continue for each source until the specified capacity is reached.</para>
        ///   <para>The values must be greater than zero. The default capacity is to the edge of the output raster.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>旅行者对源的成本容量。</para>
        ///   <para>继续计算每个源的成本，直到达到指定的容量。</para>
        ///   <para>这些值必须大于零。默认容量为输出栅格的边缘。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Capacity")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _source_capacity { get; set; } = null;


        /// <summary>
        /// <para>Travel direction</para>
        /// <para><xdoc>
        ///   <para>Specifies the direction of the traveler when applying horizontal and vertical factors and the source resistance rate.</para>
        ///   <bulletList>
        ///     <bullet_item>Travel from source—The horizontal factor, vertical factor and source resistance rate will be applied beginning at the input source, and travel out to the nonsource cells. This is the default.</bullet_item><para/>
        ///     <bullet_item>Travel to source—The horizontal factor, vertical factor and source resistance rate will be applied beginning at each nonsource cell and travel back to the input source.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>If you select the String option, you can choose between from and to options, which will be applied to all sources.</para>
        ///   <para>If you select the Field option, you can select the field from the source data that determines the direction to use for each source. The field must contain the text string FROM_SOURCE or TO_SOURCE.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定应用水平和垂直因子时行走者的方向以及源电阻率。</para>
        ///   <bulletList>
        ///     <bullet_item>从源头移动 - 水平因子、垂直因子和源电阻率将从输入源开始应用，然后向外移动到非源单元。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>流向源 - 水平因子、垂直因子和源电阻率将从每个非源像元开始应用，并返回输入源。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>如果选择“字符串”选项，则可以在“从”和“到”选项之间进行选择，这些选项将应用于所有源。</para>
        ///   <para>如果选择“字段”选项，则可以从源数据中选择用于确定每个源使用方向的字段。该字段必须包含文本字符串 FROM_SOURCE 或 TO_SOURCE。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Travel direction")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _source_direction { get; set; } = null;


        public PathAllocation SetEnv(int? autoCommit = null, object cellSize = null, object compression = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object mask = null, object outputCoordinateSystem = null, object parallelProcessingFactor = null, object scratchWorkspace = null, object snapRaster = null, double[] tileSize = null, object workspace = null)
        {
            base.SetEnv(autoCommit: autoCommit, cellSize: cellSize, compression: compression, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, mask: mask, outputCoordinateSystem: outputCoordinateSystem, parallelProcessingFactor: parallelProcessingFactor, scratchWorkspace: scratchWorkspace, snapRaster: snapRaster, tileSize: tileSize, workspace: workspace);
            return this;
        }

    }

}